﻿#ifndef WRWORKTCPCOMMSERVERAFFAIR_H
#define WRWORKTCPCOMMSERVERAFFAIR_H

#include "../WRWorkAffair.h"
#include "../WRWorkTcpComm.h"
#include "../WRWorkTcpCommConsts.h"
#include "WRWorkTcpCommServerObject.h"

//表示工作TCP通讯服务器事务。
class WRSOFT_WORKING_COMMON_CLASS WRWorkTcpCommServerAffair
{
    friend class WRWorkTcpCommServerObject;

private:
    typedef WRWorkTcpCommServerInterface* Interface;
    static int _counter;

    int m_id;
    int m_index;
    WRWorkTcpCommServerObject* m_owner;
    WRWorkAffair* m_target;
    Interface m_iiArr[256];
    int m_iiLen;
    QAtomicInt m_refCnt;

    //初始化当前对象。
    WRWorkTcpCommServerAffair(WRWorkTcpCommServerObject* owner, int index, WRWorkAffair* target);
    //清理对象所占用的相关资源。
    ~WRWorkTcpCommServerAffair(void);

    //查询指定标识的工作处理者。
    Interface queryWorkDealer(const QUuid& uuid);
    //查询指定标识的任务处理者。
    Interface queryTaskDealer(const QUuid& uuid);
    //查询指定标识的数据源接口。
    Interface queryDataSource(const QUuid& uuid);
    //查询指定标识的事件源接口。
    Interface queryEventSource(const QUuid& uuid);
    //查询指示标识的状态源接口。
    Interface queryStateSource(const QUuid& uuid);

public:
    //添加对象引用。
    inline void addRef(void)
    {
        m_refCnt.ref();
        m_owner->addRef();
    }
    //释放对象引用, 如果引用计数为0，则删除对象，返回True，否则返回False。
    inline bool release(void)
    {
        if (!m_refCnt.deref())
        {
            delete this;
            return true;
        }
        m_owner->release();
        return false;
    }

    //获取标识。
    inline int id(void) const
    {
        return m_id;
    }
    //获取索引。
    inline int index(void) const
    {
        return m_index;
    }
    //获取目标事务。
    inline WRWorkAffair* target(void) const
    {
        return m_target;
    }

    //获取所有者。
    inline WRWorkTcpCommServerObject* owner(void) const
    {
        return m_owner;
    }

    //执行关闭处理。
    void shutdown(void);

    //处理接收到数据。
    void procData(const unsigned char* buf, int len);
    //发送数据。
    inline bool sendData(WRDataPacket* packet)
    {
        return m_owner->sendData(packet);
    }
};

#endif // WRWORKTCPCOMMSERVERAFFAIR_H
